μΉ κ°λ°μμ μ΄κΈ° μ€ν¬λ‘€ μμΉλ₯Ό μ λ°νκ² μ μ΄νμ¬ μ¬μ©μ κ²½νκ³Ό μ κ·Όμ±μ ν₯μμν€λ CSS scroll-start μμ± μ¬μ©μ λν μ’ ν© κ°μ΄λμ λλ€.
CSS Scroll Start: μ΄κΈ° μ€ν¬λ‘€ μμΉ μ μ΄ λ§μ€ν°νκΈ°
νλ μΉ κ°λ°μμ λ§€λ ₯μ μ΄κ³ μ¬μ©μ μΉνμ μΈ κ²½νμ λ§λλ κ²μ λ―Έλ¬νμ§λ§ κ°λ ₯ν λν μΌμ λ¬λ € μμ΅λλ€. μ’ μ’ κ°κ³Όλλ λν μΌ μ€ νλλ νμ΄μ§λ μμμ μ΄κΈ° μ€ν¬λ‘€ μμΉμ λλ€. μ¬μ©μκ° μ΄μν μ νλ νΌλμ€λ¬μ΄ λ μ΄μμ μμ΄ νμν μμΉμ μ ννκ² λλ¬νλλ‘ λ³΄μ₯νλ κ²μ μΉμ¬μ΄νΈμμ μνΈ μμ©μ ν¬κ² ν₯μμν΅λλ€. CSS Scroll Start μμ±, νΉν `scroll-padding`, `scroll-margin`, κ·Έλ¦¬κ³ (κ°μ μ μΌλ‘) μ€ν¬λ‘€ μ΅μ»€λ§μ μ¬μ©μ μΈν°νμ΄μ€ λμμΈμ μ΄ μ€μν μΈ‘λ©΄μ λ§μ€ν°ν μ μλ λꡬλ₯Ό μ 곡ν©λλ€. μ΄ μ’ ν© κ°μ΄λμμλ μ΄λ¬ν μμ±λ€, κ·Έ μ©λ, κ·Έλ¦¬κ³ κ΅¬νμ μν λͺ¨λ² μ¬λ‘λ₯Ό νμν κ²μ λλ€.
μ΄κΈ° μ€ν¬λ‘€ μμΉ μ μ΄μ νμμ± μ΄ν΄νκΈ°
κΈ΄ κΈ°μ¬μ νΉμ μΉμ μΌλ‘ μ΄λν΄μΌ νλ λ§ν¬λ₯Ό ν΄λ¦νλ€κ³ μμν΄ λ³΄μμμ€. κ΄λ ¨ μ λͺ©μ λ°λ‘ λλ¬νλ λμ , κ³ μ λ ν€λμ κ°λ €μ Έ λͺ λ¨λ½ μμ μκ±°λ λ¬Έμ₯ μ€κ°μ μ΄μνκ² λ°°μΉλ μμ μ λ°κ²¬νκ² λ©λλ€. μ΄ μ’μ μ€λ¬μ΄ κ²½νμ μ΄κΈ° μ€ν¬λ‘€ μμΉ μ μ΄μ μ€μμ±μ κ°μ‘°ν©λλ€.
μ΄κΈ° μ€ν¬λ‘€ μμΉ μ μ΄κ° μ€μν μΌλ°μ μΈ μλ리μ€λ λ€μκ³Ό κ°μ΅λλ€:
- μ΅μ»€ λ§ν¬/λͺ©μ°¨: μ΅μ»€ λ§ν¬λ₯Ό ν΅ν΄ λ¬Έμ λ΄ νΉμ μΉμ μΌλ‘ μ΄λνλ κ²½μ°.
- λ¨μΌ νμ΄μ§ μ ν리μΌμ΄μ (SPAs): λΌμ°νΈ μ ν μ€ μ€ν¬λ‘€ μμΉ μΌκ΄μ±μ μ μ§νλ κ²½μ°.
- μ½ν μΈ λ‘λ©: μ½ν μΈ κ° λμ μΌλ‘ λ‘λλ λ μκΈ°μΉ μμ μ νλ₯Ό λ°©μ§νκ³ λΆλλ¬μ΄ μ νμ 보μ₯νλ κ²½μ°.
- μ κ·Όμ±: μ₯μ κ° μλ μ¬μ©μ, νΉν 보쑰 κΈ°μ μ μ¬μ©νλ μ¬μ©μμκ² μμΈ‘ κ°λ₯νκ³ μ λ’°ν μ μλ κ²½νμ μ 곡νλ κ²½μ°.
- λͺ¨λ°μΌ λ΄λΉκ²μ΄μ : λ©λ΄ μνΈ μμ© ν κ³ μ λ λ΄λΉκ²μ΄μ λ°μμ κ²ΉμΉ¨μ νΌνκ³ μ½ν μΈ λ₯Ό μ¬λ°λ₯΄κ² νμνλ κ²½μ°.
ν΅μ¬ CSS μμ±: `scroll-padding` λ° `scroll-margin`
μ€ν¬λ‘€ μ€λ λ° λμ μμΉ μ§μ μ μν μκ°μ μ€νμ μ μ μ΄νλ λ κ°μ§ μ£Όμ CSS μμ±μ `scroll-padding`κ³Ό `scroll-margin`μ λλ€. μ΄ λμ μ°¨μ΄μ μ μ΄ν΄νλ κ²μ΄ μνλ ν¨κ³Όλ₯Ό μ»λ μ΄μ μ λλ€.
`scroll-padding`
`scroll-padding`μ μ΅μ μ μ€ν¬λ‘€ μμΉλ₯Ό κ³μ°νλ λ° μ¬μ©λλ μ€ν¬λ‘€ν¬νΈ(μ€ν¬λ‘€ 컨ν μ΄λμ 보μ΄λ μμ)λ‘λΆν°μ μμͺ½ μ¬λ°±μ μ μν©λλ€. μ€ν¬λ‘€ κ°λ₯ν μμ μμͺ½μ ν¨λ©μ μΆκ°νλ κ²μ΄λΌκ³ μκ°νλ©΄ λ©λλ€. μ΄ ν¨λ©μ `scroll-snap`κ³Ό κ°μ κΈ°λ₯μ μ¬μ©νκ±°λ νλκ·Έλ¨ΌνΈ μλ³μ(μ΅μ»€ λ§ν¬)λ‘ μ΄λν λ μμκ° λ·°λ‘ μ€ν¬λ‘€λλ λ°©μμ μν₯μ λ―ΈμΉ©λλ€.
ꡬ문:
`scroll-padding:
- `<length>`: ν¨λ©μ κ³ μ λ κΈΈμ΄λ‘ μ§μ ν©λλ€ (μ: `20px`, `1em`).
- `<percentage>`: ν¨λ©μ μ€ν¬λ‘€ 컨ν μ΄λ ν¬κΈ°μ λ°±λΆμ¨λ‘ μ§μ ν©λλ€ (μ: `10%`).
- `auto`: λΈλΌμ°μ κ° ν¨λ©μ κ²°μ ν©λλ€. μ’ μ’ `0px`μ λμΌν©λλ€.
κ°λ³ μΈ‘λ©΄μ λν ν¨λ©λ μ€μ ν μ μμ΅λλ€:
- `scroll-padding-top`
- `scroll-padding-right`
- `scroll-padding-bottom`
- `scroll-padding-left`
μμ :
λμ΄κ° 60pxμΈ κ³ μ ν€λκ° μλ μΉμ¬μ΄νΈλ₯Ό μκ°ν΄ 보μΈμ. `scroll-padding`μ΄ μμΌλ©΄ μΉμ μΌλ‘ κ°λ μ΅μ»€ λ§ν¬λ₯Ό ν΄λ¦νμ λ μΉμ μ λͺ©μ΄ ν€λμ κ°λ €μ§ κ°λ₯μ±μ΄ λμ΅λλ€.
```css /* λ£¨νΈ μμ λλ νΉμ μ€ν¬λ‘€ κ°λ₯ 컨ν μ΄λμ μ μ© */ :root { scroll-padding-top: 60px; } ```μ΄ CSS κ·μΉμ μ€ν¬λ‘€ν¬νΈ μλ¨μ 60pxμ ν¨λ©μ μΆκ°ν©λλ€. μ¬μ©μκ° μ΅μ»€ λ§ν¬λ₯Ό ν΄λ¦νλ©΄ λΈλΌμ°μ λ λμ μμλ₯Ό λ·°λ‘ μ€ν¬λ‘€νμ¬ μ€ν¬λ‘€ν¬νΈ μλ¨μμ 60px μλμ μμΉνλλ‘ λ³΄μ₯νλ©°, κ³ μ ν€λκ° μ΄λ₯Ό κ°λ¦¬λ κ²μ ν¨κ³Όμ μΌλ‘ λ°©μ§ν©λλ€.
`scroll-margin`
`scroll-margin`μ μμλ₯Ό λ·°λ‘ κ°μ Έμ¬ λ μ΅μ μ μ€ν¬λ‘€ μμΉλ₯Ό κ³μ°νλ λ° μ¬μ©λλ μμμ λ§μ§μ μ μν©λλ€. λμ μμ μ체μ λ°κΉ₯μͺ½μ λ§μ§μ μΆκ°νλ κ²μ΄λΌκ³ μκ°νλ©΄ λ©λλ€. μ΄λ μμκ° μ€ν¬λ‘€ν¬νΈμ κ°μ₯μ리μ λ무 κ°κΉκ² μμΉνμ§ μλλ‘ νλ μ€νμ μν μ ν©λλ€. `scroll-margin`μ μ€ν¬λ‘€ ν μμ μ£Όλ³μ μ½κ°μ 곡κ°μ ν보νκ³ μΆμ λ νΉν μ μ©ν©λλ€.
ꡬ문:
`scroll-margin: <length> | <percentage>`
- `<length>`: λ§μ§μ κ³ μ λ κΈΈμ΄λ‘ μ§μ ν©λλ€ (μ: `20px`, `1em`).
- `<percentage>`: λ§μ§μ κ΄λ ¨ μ°¨μμ λ°±λΆμ¨λ‘ μ§μ ν©λλ€ (μ: μμ λλΉ λλ λμ΄μ `10%`).
`scroll-padding`κ³Ό μ μ¬νκ² κ°λ³ μΈ‘λ©΄μ λν λ§μ§μ μ μν μ μμ΅λλ€:
- `scroll-margin-top`
- `scroll-margin-right`
- `scroll-margin-bottom`
- `scroll-margin-left`
μμ :
μ€ν¬λ‘€ κ°λ₯ν 컨ν μ΄λ μμ μΌλ ¨μ μΉ΄λκ° μλ€κ³ μμν΄ λ³΄μΈμ. (μλ§λ λ΄λΉκ²μ΄μ λ²νΌμ ν΅ν΄) μΉ΄λκ° λ·°λ‘ μ€ν¬λ‘€λ λ 컨ν μ΄λ κ°μ₯μ리μ λ°μΉ λΆμ§ μλλ‘ νκ³ μΆμ΅λλ€.
```css .card { scroll-margin: 10px; } ```μ΄ CSS κ·μΉμ κ° μΉ΄λμ λͺ¨λ λ©΄μ 10px λ§μ§μ μ μ©ν©λλ€. μΉ΄λκ° λ·°λ‘ λ€μ΄μ€λ©΄ λΈλΌμ°μ λ μΉ΄λμ κ°μ₯μ리μ μ€ν¬λ‘€ 컨ν μ΄λμ κ°μ₯μ리 μ¬μ΄μ μ΅μ 10pxμ κ°κ²©μ΄ μλλ‘ λ³΄μ₯ν©λλ€.
μ£Όμ μ°¨μ΄μ μμ½
λͺ ννκ² κ΅¬λΆνκΈ° μν΄:
- `scroll-padding`μ μ€ν¬λ‘€ 컨ν μ΄λμ μ μ©λλ©° 컨ν μ΄λ λ΄λΆμ μ¬μ© κ°λ₯ν μ€ν¬λ‘€ 곡κ°μ μν₯μ μ€λλ€.
- `scroll-margin`μ λ·°λ‘ μ€ν¬λ‘€λλ λμ μμμ μ μ©λλ©° ν΄λΉ μμ μ£Όλ³μ 곡κ°μ μΆκ°ν©λλ€.
μ€ν¬λ‘€ μ΅μ»€λ§: μκΈ°μΉ μμ μ€ν¬λ‘€ μ ν λ°©μ§νκΈ°
μ€ν¬λ‘€ μ΅μ»€λ§μ νμ¬ μ€ν¬λ‘€ μμΉ μμ μ½ν μΈ κ° λ³κ²½λ λ μ€ν¬λ‘€ μμΉλ₯Ό μλμΌλ‘ μ‘°μ νλ λΈλΌμ°μ κΈ°λ₯μ λλ€. μ΄λ μ½ν μΈ κ° λμ μΌλ‘ μΆκ°λκ±°λ μ κ±°λ λ(μ: μ΄λ―Έμ§ λ‘λ©, κ΄κ³ μΆν, μ½ν μΈ νμ₯/μΆμ) μ¬μ©μκ° νμ΄μ§μμ μμ μ μμΉλ₯Ό μλ κ²μ λ°©μ§ν©λλ€.
`scroll-padding`μ΄λ `scroll-margin`μ μν΄ μ§μ μ μ΄λμ§λ μμ§λ§, μ€ν¬λ‘€ μ΅μ»€λ§μ΄ μ΄λ¬ν μμ±λ€κ³Ό μ΄λ»κ² μνΈ μμ©νλμ§ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. λ§μ κ²½μ°, `scroll-padding`κ³Ό `scroll-margin`μ μ μ ν μ¬μ©νλ©΄ μ€ν¬λ‘€ μ΅μ»€λ§μ νμμ±μ μ€μ΄κ±°λ μ΅μν κ·Έ λμμ λ μμΈ‘ κ°λ₯νκ² λ§λ€ μ μμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ λλΆλΆμ μ΅μ λΈλΌμ°μ λ μ€ν¬λ‘€ μ΅μ»€λ§μ νμ±νν©λλ€. νμ§λ§ `overflow-anchor` CSS μμ±μ μ¬μ©νμ¬ μ΄λ₯Ό μ μ΄ν μ μμ΅λλ€.
ꡬ문:
`overflow-anchor: auto | none`
- `auto`: μ€ν¬λ‘€ μ΅μ»€λ§μ νμ±νν©λλ€ (κΈ°λ³Έκ°).
- `none`: μ€ν¬λ‘€ μ΅μ»€λ§μ λΉνμ±νν©λλ€. μ£Όμν΄μ μ¬μ©νμΈμ! μ€ν¬λ‘€ μ΅μ»€λ§μ λΉνμ±ννλ©΄ μ½ν μΈ κ° λμ μΌλ‘ λ³κ²½λ κ²½μ° μ¬μ©μ κ²½νμ ν΄μΉ μ μμ΅λλ€.
μμ :
κ³Όλν μ€ν¬λ‘€ μ΅μ»€λ§μ΄ λμμΈμ λ°©ν΄νλ λ¬Έμ κ° λ°μνλ©΄ μ νμ μΌλ‘ λΉνμ±ννλ κ²μ κ³ λ €ν μ μμ§λ§, *λ°λμ μ¬μ©μ κ²½νμ μ² μ ν ν μ€νΈν νμλ§* κ·Έλ κ² ν΄μΌ ν©λλ€.
```css .my-element { overflow-anchor: none; /* μ΄ νΉμ μμμ λν΄ μ€ν¬λ‘€ μ΅μ»€λ§ λΉνμ±ν */ } ```μ€μ©μ μΈ μμ λ° μ¬μ© μ¬λ‘
`scroll-padding`κ³Ό `scroll-margin`μ ν¨κ³Όμ μΌλ‘ μ¬μ©νλ λ°©λ²μ μ€λͺ νκΈ° μν΄ λͺ κ°μ§ μ€μ©μ μΈ μλ리μ€λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
1. κ³ μ ν€λμ μ΅μ»€ λ§ν¬
μ΄κ²μ κ°μ₯ μΌλ°μ μΈ μ¬μ© μ¬λ‘μ λλ€. νμ΄μ§ μλ¨μ κ³ μ λ ν€λκ° μκ³ μ¬μ©μκ° μ΅μ»€ λ§ν¬λ₯Ό ν΄λ¦νμ λ λμ μΉμ μ΄ ν€λ λ€μ μ¨κ²¨μ§μ§ μλλ‘ νκ³ μΆμ΅λλ€.
```htmlMy Website
Section 1
Content for section 1...
Section 2
Content for section 2...
Section 3
Content for section 3...
μ€λͺ :
- `scroll-padding-top: 80px;`κ° `:root`(λλ `html`μ΄λ `body` μμ)μ μ μ©λ©λλ€. μ΄λ λΈλΌμ°μ κ° νλκ·Έλ¨ΌνΈ μλ³μλ‘ μ€ν¬λ‘€ν λ κ³ μ ν€λμ λμ΄λ₯Ό κ³ λ €νλλ‘ λ³΄μ₯ν©λλ€.
- κ° μΉμ λ΄λΆμ μ΅μ»€ `span`μ΄ μΆκ°λμ΄ μ€ν¬λ‘€μ΄ μμλ λμ μ§μ μ λ§λλλ€.
- `anchor` μ€νμΌμ΄ μΆκ°λμ΄ κ° λ§ν¬μ μ€ν¬λ‘€ μμΉλ₯Ό μ¬λ°λ₯΄κ² μ€νμ ν©λλ€.
2. κ°κ²©μ΄ μλ μ€ν¬λ‘€ μΉ΄λ μΊλ¬μ
μνμΌλ‘ μ€ν¬λ‘€λλ μΉ΄λ μΊλ¬μ μ μμν΄ λ³΄μΈμ. κ° μΉ΄λκ° λ·°λ‘ μ€ν¬λ‘€λ λ μ£Όλ³μ μ½κ°μ κ°κ²©μ΄ μλλ‘ νκ³ μΆμ΅λλ€.
```htmlμ€λͺ :
`scroll-margin: 10px;`κ° κ° `.card` μμμ μ μ©λ©λλ€. μ΄λ μΉ΄λκ° λ·°λ‘ μ€ν¬λ‘€λ λ(μ: JavaScriptλ₯Ό μ¬μ©νμ¬ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ€ν¬λ‘€ν λ) μΉ΄λμ λͺ¨λ λ©΄μ 10pxμ λ§μ§μ΄ μλλ‘ λ³΄μ₯ν©λλ€.
3. λΌμ°νΈ μ νμ΄ μλ λ¨μΌ νμ΄μ§ μ ν리μΌμ΄μ (SPA)
SPAμμλ λΌμ°νΈ μ ν μ μΌκ΄λ μ€ν¬λ‘€ μμΉλ₯Ό μ μ§νλ κ²μ΄ λΆλλ¬μ΄ μ¬μ©μ κ²½νμ μν΄ μ€μν©λλ€. `scroll-padding`μ μ¬μ©νμ¬ λΌμ°νΈ λ³κ²½ ν μ½ν μΈ κ° κ³ μ ν€λλ λ΄λΉκ²μ΄μ λ°μ κ°λ €μ§μ§ μλλ‘ ν μ μμ΅λλ€.
μ΄ μμ λ JavaScriptμ ν¬κ² μμ‘΄νμ§λ§, CSSκ° μ€μν μν μ ν©λλ€.
```javascript // κ°μμ SPA νλ μμν¬λ₯Ό μ¬μ©ν μμ // λΌμ°νΈκ° λ³κ²½λ λ: function onRouteChange() { // μ€ν¬λ‘€ μμΉλ₯Ό 맨 μ(λλ νΉμ μμΉ)λ‘ μ¬μ€μ window.scrollTo(0, 0); // 맨 μλ‘ μ€ν¬λ‘€ // μ νμ μΌλ‘, history.scrollRestoration = 'manual'μ μ¬μ©νμ¬ // λΈλΌμ°μ κ° μ€ν¬λ‘€ μμΉλ₯Ό μλμΌλ‘ 볡μνλ κ²μ λ°©μ§ν μ μμ΅λλ€ } // CSSμμ λ£¨νΈ μμμ scroll-paddingμ΄ μ¬λ°λ₯΄κ² μ μ©λμλμ§ νμΈ: :root { scroll-padding-top: 50px; /* ν€λ λμ΄μ λ§κ² μ‘°μ */ } ```μ€λͺ :
- `onRouteChange` ν¨μλ μ¬μ©μκ° SPA λ΄μμ μ λΌμ°νΈλ‘ μ΄λν λλ§λ€ νΈλ¦¬κ±°λ©λλ€.
- `window.scrollTo(0, 0)`λ μ€ν¬λ‘€ μμΉλ₯Ό νμ΄μ§ 맨 μλ‘ μ¬μ€μ ν©λλ€. μ΄λ κ° λΌμ°νΈμ μΌκ΄λ μμμ μ 보μ₯νλ λ° μ€μν©λλ€.
- `:root { scroll-padding-top: 50px; }`λ μ€ν¬λ‘€ μμΉκ° μ¬μ€μ λ ν μ½ν μΈ κ° κ³ μ ν€λ μλμ μ¬λ°λ₯΄κ² μμΉνλλ‘ λ³΄μ₯ν©λλ€.
λͺ¨λ² μ¬λ‘ λ° κ³ λ € μ¬ν
`scroll-padding`κ³Ό `scroll-margin`μ μ¬μ©ν λ μΌλμ λμ΄μΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
- μ¬λ°λ₯Έ μμμ μ μ©νκΈ°: `scroll-padding`μ μ€ν¬λ‘€ 컨ν μ΄λμ, `scroll-margin`μ λμ μμμ μ μ©λλ€λ μ μ κΈ°μ΅νμΈμ. μλͺ»λ μμμ μ μ©νλ©΄ ν¨κ³Όκ° μμ΅λλ€.
- λμ μ½ν μΈ κ³ λ €νκΈ°: κ³ μ ν€λλ λ΄λΉκ²μ΄μ λ°μ λμ΄κ° λμ μΌλ‘ λ³κ²½λλ κ²½μ°(μ: λ°μν λμμΈμ΄λ μ¬μ©μ μ€μ μΌλ‘ μΈν΄), JavaScriptλ₯Ό μ¬μ©νμ¬ `scroll-padding` κ°μ μ λ°μ΄νΈν΄μΌ ν μ μμ΅λλ€.
- μ κ·Όμ±: `scroll-padding`κ³Ό `scroll-margin`μ μ¬μ©μ΄ μ κ·Όμ±μ λΆμ μ μΈ μν₯μ λ―ΈμΉμ§ μλλ‘ νμΈμ. 보쑰 κΈ°μ λ‘ ν μ€νΈνμ¬ μ€ν¬λ‘€ λμμ΄ λͺ¨λ μ¬μ©μμκ² μμΈ‘ κ°λ₯νκ³ μ¬μ© κ°λ₯νμ§ νμΈνμΈμ.
- CSS λ³μ μ¬μ©νκΈ°: μ μ§λ³΄μμ±μ μν΄ CSS λ³μλ₯Ό μ¬μ©νμ¬ `scroll-padding`κ³Ό `scroll-margin`μ κ°μ μ μνλ κ²μ κ³ λ €νμΈμ. μ΄λ κ² νλ©΄ μ€νμΌμνΈ μ 체μμ κ°μ λ μ½κ² μ λ°μ΄νΈν μ μμ΅λλ€.
- μ² μ νκ² ν μ€νΈνκΈ°: λ€μν λΈλΌμ°μ μ μ₯μΉμμ ꡬνμ ν μ€νΈνμ¬ μΌκ΄λ λμμ 보μ₯νμΈμ. νΉν λΆλλ¬μ΄ μ€ν¬λ‘€λ§ λ° μ€ν¬λ‘€ μ΅μ»€λ§κ³Ό κ°μ κΈ°λ₯κ³Ό μ€ν¬λ‘€ λμμ΄ μ΄λ»κ² μνΈ μμ©νλμ§μ μ£Όμλ₯Ό κΈ°μΈμ΄μΈμ.
- μ±λ₯: `scroll-padding`κ³Ό `scroll-margin`μ μΌλ°μ μΌλ‘ μ±λ₯μ΄ μ’μ§λ§, μ€ν¬λ‘€ μ΅μ»€λ§μ κ³Όλνκ² μ¬μ©νκ±°λ λΆμ μ νκ² λΉνμ±ννλ©΄ λλλ‘ μ±λ₯ λ¬Έμ κ° λ°μν μ μμ΅λλ€. μΉμ¬μ΄νΈμ μ±λ₯μ λͺ¨λν°λ§νμ¬ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νκ³ ν΄κ²°νμΈμ.
κΈ°λ³Έμ λμ΄: κ³ κΈ κΈ°μ
`scroll-snap`κ³Ό `scroll-padding` ν¨κ» μ¬μ©νκΈ°
`scroll-snap`μ μ¬μ©νλ©΄ μ¬μ©μκ° μ€ν¬λ‘€μ λ§μ³€μ λ μ€ν¬λ‘€ 컨ν μ΄λκ° "μ€λ "λμ΄μΌ νλ μ§μ μ μ μν μ μμ΅λλ€. `scroll-padding`κ³Ό κ²°ν©νλ©΄ λ μΈλ ¨λκ³ μκ°μ μΌλ‘ λ§€λ ₯μ μΈ μ€ν¬λ‘€ μ€λ κ²½νμ λ§λ€ μ μμ΅λλ€.
```css .scroll-container { overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding-left: 20px; /* μμ: μΌμͺ½μ ν¨λ© μΆκ° */ } .scroll-item { scroll-snap-align: start; } ```μ΄ μμ μμ `scroll-padding-left`λ 첫 λ²μ§Έ `scroll-item`μ΄ μ»¨ν μ΄λμ μΌμͺ½ κ°μ₯μ리μ λ°μΉ λΆμ΄ μ€λ λμ§ μλλ‘ λ³΄μ₯ν©λλ€.
`scroll-margin`κ³Ό Intersection Observer API κ²°ν©νκΈ°
Intersection Observer APIλ₯Ό μ¬μ©νλ©΄ μμκ° λ·°ν¬νΈμ λ€μ΄μ€κ±°λ λκ° λλ₯Ό κ°μ§ν μ μμ΅λλ€. μ΄ APIλ₯Ό `scroll-margin`κ³Ό ν¨κ» μ¬μ©νμ¬ μμμ κ°μμ±μ λ°λΌ μ€ν¬λ‘€ λμμ λμ μΌλ‘ μ‘°μ ν μ μμ΅λλ€.
```javascript const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { // μμκ° λ³΄μΌ λ 무μΈκ° μν console.log('Element is visible!'); } else { // μμκ° λ³΄μ΄μ§ μμ λ 무μΈκ° μν } }); }); const element = document.querySelector('.my-element'); observer.observe(element); ```μ΄ μμ κ° `scroll-margin`μ μ§μ μμ νμ§λ μμ§λ§, Intersection Observerλ₯Ό μ¬μ©νμ¬ μμμ λ·°ν¬νΈ λλΉ μμΉμ λ°λΌ λ€λ₯Έ `scroll-margin` κ°μ μ μ©νλ ν΄λμ€λ₯Ό λμ μΌλ‘ μΆκ°νκ±°λ μ κ±°ν μ μμ΅λλ€.
κ²°λ‘ : λ λμ μ¬μ©μ κ²½νμ μν μ€ν¬λ‘€ μμΉ λ§μ€ν°νκΈ°
`scroll-padding`κ³Ό `scroll-margin`μ μ€ν¬λ‘€ μ΅μ»€λ§μ λν μ΄ν΄μ ν¨κ» μ΄κΈ° μ€ν¬λ‘€ μμΉλ₯Ό μ μ΄νκ³ λ μΈλ ¨λκ³ μ¬μ©μ μΉνμ μΈ μΉ κ²½νμ λ§λλ κ°λ ₯ν λꡬμ λλ€. μ΄λ¬ν μμ±λ€μ λ―Έλ¬ν μ°¨μ΄λ₯Ό μ΄ν΄νκ³ μ μ€νκ² μ μ©ν¨μΌλ‘μ¨ μΉμ¬μ΄νΈμ μ¬μ©μ±κ³Ό μ κ·Όμ±μ ν¬κ² ν₯μμμΌ μ¬μ©μκ° νμ νμν κ³³μ μ ννκ² λλ¬νλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
μ² μ νκ² ν μ€νΈνκ³ , λμ μ½ν μΈ λ₯Ό κ³ λ €νλ©°, μ κ·Όμ±μ μ°μ μνμ¬ λͺ¨λ μ¬μ©μκ° μ₯μΉ, λΈλΌμ°μ λλ 보쑰 κΈ°μ μ νΈλμ κ΄κ³μμ΄ κΈμ μ μΈ κ²½νμ ν μ μλλ‘ νμμμ€.
μΆκ° νμ΅ μλ£
- MDN Web Docs: scroll-padding
- MDN Web Docs: scroll-margin
- CSS-Tricks: scroll-padding
- CSS-Tricks: scroll-margin